/**
 * Prompt增强器选择器
 * 
 * 根据配置和环境自动选择合适的增强器：
 * - LightweightPromptEnhancer: 轻量级（不需要JSON文件，包体积小）
 * - UltraDeepPromptEnhancer: 完整版（需要JSON文件，功能更强）
 */

import * as fs from 'fs';
import * as path from 'path';
import { LightweightPromptEnhancer } from './LightweightPromptEnhancer';
import { UltraDeepPromptEnhancer } from './UltraDeepPromptEnhancer';

export class PromptEnhancerSelector {
    private static useLightweight: boolean | null = null;
    
    /**
     * 自动选择并增强Prompt
     */
    static enhancePrompt(
        basePrompt: string, 
        sourceCode: string, 
        functionName?: string,
        classContext?: any  // 新增：类上下文和函数调用信息
    ): string {
        // 首次调用时决定使用哪个增强器
        if (this.useLightweight === null) {
            this.useLightweight = this.shouldUseLightweight();
            
            if (this.useLightweight) {
                console.log('[PromptEnhancerSelector] 使用轻量级增强器（精简规则模式）');
            } else {
                console.log('[PromptEnhancerSelector] 使用完整增强器（知识库模式）');
            }
        }
        
        if (this.useLightweight) {
            return LightweightPromptEnhancer.enhancePrompt(basePrompt, sourceCode, functionName, classContext);
        } else {
            return UltraDeepPromptEnhancer.enhancePrompt(basePrompt, sourceCode, functionName, classContext);
        }
    }
    
    /**
     * 判断是否应该使用轻量级增强器
     * 
     * 判断逻辑：
     * 1. 如果知识库JSON文件都不存在 -> 使用轻量级
     * 2. 如果配置明确指定 -> 按配置
     * 3. 默认 -> 如果JSON文件存在则使用完整版
     */
    private static shouldUseLightweight(): boolean {
        try {
            // 检查环境变量配置
            const envConfig = process.env.HARMONYPILOT_USE_LIGHTWEIGHT_ENHANCER;
            if (envConfig === 'true') {
                return true;
            }
            if (envConfig === 'false') {
                return false;
            }
            
            // 检查知识库文件是否存在
            const extensionPath = this.getExtensionPath();
            const knowledgeDir = path.join(extensionPath, 'core', 'knowledge');
            
            const criticalFiles = [
                'unittest-prompt-patterns.json',
                'ndk-napi-prompt-patterns.json'
            ];
            
            let existingFiles = 0;
            for (const file of criticalFiles) {
                const filePath = path.join(knowledgeDir, file);
                if (fs.existsSync(filePath)) {
                    existingFiles++;
                }
            }
            
            // 如果关键文件都不存在，使用轻量级
            if (existingFiles === 0) {
                console.log('[PromptEnhancerSelector] 知识库文件不存在，使用轻量级增强器');
                return true;
            }
            
            // 默认使用完整版（如果文件存在）
            return false;
            
        } catch (err) {
            console.warn('[PromptEnhancerSelector] 检测增强器时出错，使用轻量级版本:', err);
            return true;
        }
    }
    
    /**
     * 获取插件根目录
     */
    private static getExtensionPath(): string {
        // 尝试多种方式获取插件路径
        if (typeof __dirname !== 'undefined') {
            // 从当前文件向上查找到根目录
            let dir = __dirname;
            for (let i = 0; i < 5; i++) {
                const packageJson = path.join(dir, 'package.json');
                if (fs.existsSync(packageJson)) {
                    return dir;
                }
                dir = path.dirname(dir);
            }
        }
        
        // 回退方案
        return process.cwd();
    }
    
    /**
     * 手动设置使用轻量级增强器
     */
    static setUseLightweight(value: boolean): void {
        this.useLightweight = value;
    }
    
    /**
     * 获取当前使用的增强器类型
     */
    static getCurrentEnhancerType(): 'lightweight' | 'full' {
        if (this.useLightweight === null) {
            this.shouldUseLightweight();
        }
        return this.useLightweight ? 'lightweight' : 'full';
    }
}

